package tv.acgn.advertisement.publish.service;

import org.springframework.stereotype.Service;
import tv.acgn.advertisement.publish.exception.AbstractAdPubException;
import tv.acgn.advertisement.publish.vo.user.AdUserRequestVO;
import tv.acgn.advertisement.publish.vo.user.AdUserResponseVO;

/**
 * @author : junG
 * @program : advertisement-ad-pub-service
 * @description : 用户业务服务接口
 * @date : 2019-06-02 02:03
 **/

@Service
public interface UserService {
    /**
     * <h2>创建用户服务</h2>
     *
     * @param requestVO [1] 用户调用请求对象
     *
     * @return {@link AdUserResponseVO} 用户调用返回对象
     *
     * @throws AbstractAdPubException 异常
     * @author junG
     * @description 创建用户服务
     * @date 2:04 2019/6/2
     */
    AdUserResponseVO addUser(AdUserRequestVO requestVO) throws AbstractAdPubException;

    /**
     * <h2>获取用户</h2>
     *
     * @param userId [1] 用户身份码
     *
     * @return {@link AdUserResponseVO} 用户调用返回对象
     *
     * @throws AbstractAdPubException 异常
     * @author junG
     * @description 根据用户身份码 获取用户
     * @date 2:06 2019/6/2
     */
    AdUserResponseVO getUser(String userId) throws AbstractAdPubException;

    /**
     * <h2>查找用户</h2>
     *
     * @param requestVO [1] 用户调用请求对象
     *
     * @return {@link AdUserResponseVO} 用户调用返回对象
     *
     * @throws AbstractAdPubException 异常
     * @author junG
     * @description 根据条件查找用户
     * @date 2:06 2019/6/2
     */
    AdUserResponseVO findUser(AdUserRequestVO requestVO) throws AbstractAdPubException;

    /**
     * <h2>变更用户信息</h2>
     *
     * @param requestVO [1] 用户调用请求对象
     *
     * @return {@link AdUserResponseVO} 用户调用返回对象
     *
     * @throws AbstractAdPubException 异常
     * @author junG
     * @description 变更用户信息
     * @date 2:06 2019/6/2
     */
    AdUserResponseVO updateUser(AdUserRequestVO requestVO) throws AbstractAdPubException;

    /**
     * <h2>删除用户</h2>
     *
     * @param userId [1] 用户身份码
     *
     * @return {@link AdUserResponseVO} 用户调用返回对象
     *
     * @throws AbstractAdPubException 异常
     * @author junG
     * @description 根据用户身份码 删除用户
     * @date 2:07 2019/6/2
     */
    AdUserResponseVO deleteUser(String userId) throws AbstractAdPubException;
}
